/*+----------+--------------------------------------------------+----------+
  + 15/06/98 +             EICDOS.h                             + Ver 1.00 +
  +----------+--------------------------------------------------+----------+
  +                                                                        +
  +    Ce fichier déclare les fonctions, types et classes qui permettent   +
  + de gérer des données et structures de données issues historiquement des+
  + développements EIC réalisés sous DOS.                                  +
  +------------------------------------------------------------------------+*/
#ifndef EICDOSH
#define EICDOSH

#include <system.hpp>
#include "EIC.h"

#define enm( enumType)   unsigned short


//*********//
// dateDOS //
//*********/////////////////////////////////////////////////////////////////////
//                                                                            //
//     Cette classe permet de stocker des dates dans le format utilisé par    //
// les librairies DOS (ou windows 16bits) d'EIC.                            //
//     Des opérateurs de flux "<<" sont fournis pour l'assignation avec des   //
// variables de type TDateTime.                                               //
//                                                                            //
// Note : Cette classe n'a ni constructeur, ni opérateur d'assignation ni     //
//        opérateur de cast pour permettre sa déclaration et son utilisation  //
//        à l'intérieur de structures C.                                      //
////////////////////////////////////////////////////////////////////////////////
#pragma pack(1)
PACKAGE_EIC union dateDOS {
 private:
  struct {
   unsigned char  m_j;
   unsigned char  m_m;
   unsigned short m_a;
  };
  int m_nDate; // Attribut utilisé pour l'assignation rapide
 public:
  __property unsigned char  j = { read = m_j, write = m_j};
  __property unsigned char  m = { read = m_m, write = m_m};
  __property unsigned short a = { read = m_a, write = m_a};
 // Note: Les opérateurs relationnels ne tiennent pas compte de la validité de la date...
 public:
         dateDOS&   __fastcall operator << ( const TDateTime& dt);
  friend TDateTime& __fastcall operator << ( TDateTime& dt, const dateDOS& d);
  inline bool       __fastcall operator == ( const dateDOS& d)                 const { return( this->m_nDate == d.m_nDate);}
  inline bool       __fastcall operator != ( const dateDOS& d)                 const { return( this->m_nDate != d.m_nDate);}
  inline bool       __fastcall operator >  ( const dateDOS& d)                 const { return( this->m_nDate >  d.m_nDate);}
  inline bool       __fastcall operator >= ( const dateDOS& d)                 const { return( this->m_nDate >= d.m_nDate);}
  inline bool       __fastcall operator <  ( const dateDOS& d)                 const { return( this->m_nDate <  d.m_nDate);}
  inline bool       __fastcall operator <= ( const dateDOS& d)                 const { return( this->m_nDate <= d.m_nDate);}
  inline bool       __fastcall IsVide()                                        const { return( this->m_nDate == 0);}
};
#pragma pack()

#if sizeof( dateDOS) != 4
 #error *** Problème de définition de la date DOS ***
#endif


#endif // #ifndef EICDOSH

